package com.skt.domain.DTO;

import lombok.Data;

import javax.validation.constraints.Max;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;

/**
 * 用户登录请求数据传输对象
 * LoginDTO 专用于登录认证（只含用户名和密码），UserDTO 用于用户信息的创建或更新（含完整用户属性）
 */
@Data
public class LoginDTO {

    /**
     * 用户名
     */
    @NotBlank(message = "用户名不能为空")
    @Size(min = 3, max = 12)
    private String username;

    /**
     * 密码
     */
    @NotBlank(message = "密码不能为空")
    @Size(min = 6, max = 20)
    private String password;

    /**
     * 真实姓名
     */
    private String realName;

    /**
     * 邮箱
     */
    private String email;

    /**
     * 手机号
     */
    private String phone;
}

/**
 * @NotNull 不能为 null（但可以是空字符串 ""）	适用于所有类型（包括基本类型的包装类）
 * @NotEmpty 不能为 null 且长度/元素数 > 0（适用于 String、Collection、Map、数组）	比 @NotBlank 宽松，允许全空格
 * @NotBlank 仅用于 String，不能为 null、不能空串、不能全为空白字符	最适合用户名、密码等文本输入
 * @Size(min=, max=)	字符串长度、集合大小、数组元素个数的范围	@Size(min=6, max=20) 密码长度
 * @Pattern(regexp=...) 字符串必须匹配正则表达式    手机号、身份证、车牌号等格式校验
 * @Email 字符串必须是合法邮箱格式    @Email(message = "邮箱格式错误")
 * @Min(value) / @Max(value)	数值最小/最大值（适用于 int、long、BigDecimal 等）	@Min(1) 年龄不能小于1
 * @Positive / @Negative	必须为正数 / 负数（不包含0）	@Positive 价格、数量
 * @Future / @Past	时间必须在未来 / 过去（适用于 LocalDateTime、Date 等）	预约时间、出生日期
 */